#ifndef _OPTION_TYPE_STRING_FILE_H_
#define _OPTION_TYPE_STRING_FILE_H_

#include <string>
#include <vector>
#include <sstream>
#include <limits>

#include "OptionType.h"


namespace inilib
{

	/**
	 * Standard string type that has only the normal settings (name, isMandatory, amount)
	 * plus it it possible to set minimal and maximal length.
	 */
	class OptionTypeString : public OptionType
	{
	public:

		explicit OptionTypeString (
			const std::string & optionName,
			Mandatory isMandatory = NONMANDATORY,
			ValuesAmount amount = SINGLE_VALUE,
			const std::string & defaultValue = "",
			unsigned long long minLength = 0,
			unsigned long long maxLength = std::numeric_limits< unsigned long long >::max(),
			char separator = ','
		);

		virtual std::vector< std::string > GetDefaultValue () const;

	protected:
		virtual bool AreValuesValid_ ( const std::vector< std::string > & values ) const;

		std::vector< std::string > m_DefaultValue;
		unsigned long long m_MinLength;
		unsigned long long m_MaxLength;
	};

}

#endif